package exercise;

public class EX04_OOP {
	// 숫자 자릿수 구분 문자 _
	// 정수 리터럴이 너무 길면 가독성에 문제가 있음
	// JDK7에 새롭게 추가된 기능 중 하나는 3 자릿수마다 _를 사용할 수 있게 한것

	// 클래스에 사용되는 변수의 종류
	// 멤버(member) 변수
	//	  -> class 블록내에 선언하는 변수
	//	  -> 해당 클래스를 통해서만 사용가능한 변수 
	// 인스턴스(instance/object) 변수
	// 	  -> 객체를 가리키는 변수를 의미
	//	  -> 클래스와 new 연산자를 구성된 문장을 실행했을때의 결과물
	
	// 생성자 
	// 생성자는 객체를 생성하는데 사용하는 특별한 메서드
	// 모든 클래스는 하나 이상의 생성자가 있어야함
	// 설령, 메서드를 작성하지 않았더라도 컴파일러가 
	// 자동으로 만들어서 넣어줌
	// 생성자는 일반 메서드와는 달리 void 나 return을 사용하지않음
	// 생성자 이름은 클래스 이름과 동일해야함
		
	public static void main(String[] args) {
		Retangle r = new Retangle();
		r.width = 4;
		r.height = 40;
		r.color = "white";

		Retangle o = new Retangle();
		o.width = 3.5f;
		o.height = 35.9f;
		o.color = "orange";

		System.out.println(r);
		System.out.println(r.width);
		System.out.println(r.height);
		System.out.println(r.color);
		System.out.println(r.getArea());
		System.out.println(r.getPerimeter());		
		

		Fan f1 = new Fan();
		f1.speed = f1.FAST; // 최고속도
		f1.on = true; // 동작중
		f1.radius = 10;
		f1.color = "yellow";

		Fan f2 = new Fan();
		f2.speed = f2.MEDIUM;
		f2.on = false;
		f2.radius = 5;
		/* f2.color = "blue"; // 기본값이 blue 라 생략 가능 */

		System.out.println(f2);
		System.out.println(f2.color);
		System.out.println(f2.showFanInfo());
	

		Account cust1 = new Account();
		cust1.aid = 1122;
		cust1.balance = 20000;
		cust1.interestRate = 4.5F;
		cust1.dateCreated = "2013-11-06 13:15:45";
		System.out.println(cust1.balance);
		cust1.withDraw(3500);
		System.out.println(cust1.balance);
				
		Stock iedu = new Stock();
		iedu.sname = "경영기술";
		iedu.previousClosingPrice = 1_000_000;
		iedu.currentPrice = 750_000;
		System.out.println(iedu.getChangePercent());
				
	} // main
} // class 

class Retangle {
	float width = 1.0F;
	float height = 1.0F;
	String color = "white";
	float getArea() {
		return (width * height);
		// System.out.println(width * height);
	}	
	float getPerimeter() {
		return (width * 2) + (height * 2);
		// System.out.println((width * 2) + (height * 2));
	}
}

class Fan {
	final int SLOW = 1;
	final int MEDIUM = 2;
	final int FAST = 3;

	int speed = SLOW;
	boolean on = false;
	float radius = 5.0f;
	String color = "blue";
	
	String showFanInfo() {
		String msg = "";
		if (on == true)
			msg = speed + "," + color + "," + radius + "," + "작동중";
			// System.out.println(speed + "," + color + "," + radius + "," + "작동중");
		else
			msg = color + "," + radius + "," + "꺼져있음";
			// System.out.println(color + "," + radius + "," + "꺼져있음");
		return msg;
	}

}

class Account {
	int aid = 0;
	int balance = 0;
	float interestRate = 0;
	String dateCreated;
	float getMonthlyInterestRate() {
		return interestRate / 12;
		// System.out.println(interestRate / 12);
	}
			
    //	int withDraw(int gold) {
	//	System.out.println(balance - gold);
	//	return balance - gold;
	//  }
	// call by value 로 인해  예금 금액이 제대로 차감되지 않음
	
	int withDraw(int gold) {
	return balance -= gold;
  }
	
	int deposit(int gold) {
		return balance + gold;
	}

}

class Stock {
	String sname;
	int previousClosingPrice;
	int currentPrice;
	float getChangePercent() {
	return (1 - ((float) currentPrice / previousClosingPrice)) * 100;
	}
}

